import type { WorkBook } from "xlsx";
import type { AoAToSheet, JsonToSheet } from "./export-excel.types";

import * as xlsx from "xlsx";

const { utils, writeFile } = xlsx;

const DEF_FILE_NAME = "new-excel.xlsx";
export function jsonToSheetXlsx<T = any>({
    data,
    header,
    filename = DEF_FILE_NAME,
    json2sheetOpts = {},
    write2excelOpts = { bookType: "xlsx" }
}: JsonToSheet<T>) {
    const arrData = [...data];
    if (header) {
        arrData.unshift(header);
        json2sheetOpts.skipHeader = true;
    }

    const worksheet = utils.json_to_sheet(arrData, json2sheetOpts);

    /* add worksheet to workbook */
    const workbook: WorkBook = {
        SheetNames: [filename],
        Sheets: {
            [filename]: worksheet
        }
    };
    /* output format determined by filename */
    writeFile(workbook, filename, write2excelOpts);
    /* at this point, out.xlsb will have been downloaded */
}

export function aoaToSheetXlsx<T = any>({
    data,
    header,
    filename = DEF_FILE_NAME,
    write2excelOpts = { bookType: "xlsx" }
}: AoAToSheet<T>) {
    const arrData = [...data];
    if (header) {
        arrData.unshift(header);
    }

    const worksheet = utils.aoa_to_sheet(arrData);

    /* add worksheet to workbook */
    const workbook: WorkBook = {
        SheetNames: [filename],
        Sheets: {
            [filename]: worksheet
        }
    };
    /* output format determined by filename */
    writeFile(workbook, filename, write2excelOpts);
    /* at this point, out.xlsb will have been downloaded */
}
